"""
UBBC日志配置文件
配置日志系统，支持按小时轮转和违规图片详细记录
"""

import logging
import logging.handlers
from datetime import datetime
import os
from pathlib import Path

def setup_logging():
    """
    配置UBBC系统的日志系统
    - 控制台只显示启动信息和错误
    - 详细日志写入文件
    - 按小时轮转
    - 记录违规图片详细信息
    """

    # 创建logs目录
    log_dir = Path(__file__).parent.parent / "logs"
    log_dir.mkdir(exist_ok=True)

    # 配置根日志器
    root_logger = logging.getLogger()
    root_logger.setLevel(logging.INFO)

    # 清除现有的处理器
    root_logger.handlers.clear()

    # 创建格式器
    detailed_formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )

    simple_formatter = logging.Formatter(
        '%(asctime)s - %(levelname)s - %(message)s',
        datefmt='%H:%M:%S'
    )

    # 创建按小时轮转的文件处理器
    log_filename = log_dir / f"ubbc-{datetime.now().strftime('%Y%m%d-%H')}.log"
    file_handler = logging.handlers.TimedRotatingFileHandler(
        log_filename,
        when='H',  # 按小时轮转
        interval=1,
        backupCount=24  # 保留24个小时的日志
    )
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(detailed_formatter)

    # 创建控制台处理器（只显示启动信息和错误）
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.WARNING)  # 只显示WARNING及以上的日志
    console_handler.setFormatter(simple_formatter)

    # 添加处理器到根日志器
    root_logger.addHandler(file_handler)
    root_logger.addHandler(console_handler)

    # 配置特定的模块日志器
    ai_logger = logging.getLogger('src.ai_services')
    ai_logger.setLevel(logging.INFO)

    main_logger = logging.getLogger('src.main')
    main_logger.setLevel(logging.INFO)

    web_logger = logging.getLogger('src.web_admin')
    web_logger.setLevel(logging.INFO)

    # 返回日志器实例供后续使用
    return {
        'root': root_logger,
        'ai': ai_logger,
        'main': main_logger,
        'web': web_logger,
        'file_handler': file_handler,
        'console_handler': console_handler
    }

def log_violation(image_url: str, violation_reason: str, model_name: str, model_output: str):
    """
    记录违规图片的详细信息

    Args:
        image_url: 图片来源URL
        violation_reason: 违规原因
        model_name: 使用的模型名称
        model_output: 模型返回的识别内容
    """
    violation_logger = logging.getLogger('violation')

    # 如果还没有为violation创建专门的处理器，创建一个
    if not violation_logger.handlers:
        log_dir = Path(__file__).parent.parent / "logs"
        violation_handler = logging.FileHandler(
            log_dir / "violations.log",
            encoding='utf-8'
        )
        violation_formatter = logging.Formatter(
            '%(asctime)s - VIOLATION - %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S'
        )
        violation_handler.setFormatter(violation_formatter)
        violation_logger.addHandler(violation_handler)
        violation_logger.setLevel(logging.INFO)
        # 防止日志向上传播，避免重复记录
        violation_logger.propagate = False

    violation_message = f"""
违规图片检测记录:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📍 图片URL: {image_url}
🚫 违规原因: {violation_reason}
🤖 模型名称: {model_name}
📝 模型输出: {model_output[:500]}{'...' if len(model_output) > 500 else ''}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
"""

    violation_logger.info(violation_message)

def get_current_log_file():
    """获取当前正在写入的日志文件路径"""
    log_dir = Path(__file__).parent.parent / "logs"
    current_time = datetime.now().strftime('%Y%m%d-%H')
    return log_dir / f"ubbc-{current_time}.log"
